package com.cloud.spider.utils;

import com.cloud.spider.dtos.ChapterContentDto;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;

/**
 * @author 柳晓宇
 * @description freemarker 工具类
 * @create 2023/8/27
 */
@Component
public class FreemarkerUtil {
    // 方式一
    /*@Autowired
    private  Configuration autoConfiguration;

    private static Configuration staticConfiguration;

    @PostConstruct
    public void initialize() {
        staticConfiguration = this.autoConfiguration;
    }*/
    // 方式二
    private static Configuration configuration;

    @Autowired
    FreemarkerUtil(Configuration configuration){
        FreemarkerUtil.configuration = configuration;
    }

    /**
     * @description: 去除小说正文无关文本
     * @param: [dto] 
     * @return: com.cloud.spider.dto.ChapterContentDto 
     * @author: Liuxiaoyu
     * @date: 2023/8/27 15:39
     */ 
    public static ChapterContentDto removeIrrelevantText(ChapterContentDto dto){
        String content = dto.getChapterContent();
        content = cleanText(content);
        dto.setChapterContent(content);
        return dto;
    }


    public static String cleanText(String text) {
        // 定义正则表达式模式
        String pattern = "(网站即将关闭，下载爱阅app免费看最新内容可)"
                + "|(请下载爱阅小说app，无广告免费阅读最新章节内容。)"
                + "|(下载爱阅小说app，阅读最新章节内容无广告免费。)"
                + "|(看最新章节内容下载爱阅小说app，最新章节内容已在爱阅小说app，网站已经不更新最新章节内容。)"
                + "|(为您提供大神神豪赘婿战神无敌的技校生相亲女博士见面畅谈核聚变最快更新)"
                + "|(看最新章节内容下载爱阅小说app，最新章节内容已在爱阅小说app，网站已经不更新最新章节内容。南凰洲东部，一隅。)"
                + "|(三月，初春。)"
;
        // 使用 replaceAll 替换匹配到的模式为空字符串
        return text.replaceAll(pattern, "");
    }



    public static void generateStaticHtmlOfFullBook(List<ChapterContentDto> chapterContentList, String filePath){
        // freemarker的模板对象，获取模板
        Template template = null;
        try {
            template = configuration.getTemplate("book.ftl");
            File file = new File(filePath);
            if(!file.exists()){
                // 先得到文件的上级目录，并创建上级目录，再创建文件
                file.getParentFile().mkdir();
                try {
                    //创建文件
                    file.createNewFile();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            HashMap<Object, Object> map = new HashMap<>();
            // 存入参数
            map.put("chapterContentList",chapterContentList);
            template.process(map, new FileWriter(filePath));
        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (TemplateException e) {
            throw new RuntimeException(e);
        }
    }

}
